﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CoreOracle
{
    /// <summary>
    /// Класс представляющий данные о присоеденившимся к базе пользователе
    /// </summary>
    public abstract class LogOnBase
    {
        // Fields
        private HashSet<int> hashSet = new HashSet<int>();

        /// <summary>
        /// Подключение к базе данных
        /// </summary>
        /// <param name="name">Имя пользователя</param>
        /// <param name="password">Пароль пользователя</param>
        /// <param name="server">Сервер базы данных</param>
        public abstract void Enter(string name, string password, string server);
        
        /// <summary>
        /// Закрытие текущего соединения с базой и открытие нового
        /// </summary>
        /// <param name="name">Имя пользователя</param>
        /// <param name="password">Пароль пользователя</param>
        /// <param name="server">Сервер базы данных</param>
        public abstract void ReEnter(string name, string password, string server);
        
        /// <summary>
        /// Смена пользовательского пароля
        /// </summary>
        /// <param name="password">Новый пароль</param>
        public abstract void ChangePassword(string password);

        /// <summary>
        /// Проверка правильности пароля пользователя
        /// </summary>
        /// <param name="password">Праверяемый пароль</param>
        /// <returns>True - если пароль верный, false - в обратном случае</returns>
        public abstract bool CheckPassword(string password);

        // Properties
        /// <summary>
        /// Имя пользователя базы
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// Login пользователя
        /// </summary>
        public string LogOn { get; set; }
        /// <summary>
        /// Роль пользователя
        /// </summary>
        public string Role { get; set; }
        /// <summary>
        /// Идентификатор пользователя
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// Таблица доступа
        /// </summary>
        public HashSet<int> HashSet
        {
            get
            {
                return hashSet;
            }
        }
        /// <summary>
        /// Имя базы данных
        /// </summary>
        public string DbName { get; set; }
        /// <summary>
        /// Имя сервера баз данных
        /// </summary>
        public string ServerName { get; set; }
    }

}
